#include "patches.h"
#include "overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.h"
#include "overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.h"
#include "overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.h"
#include "overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.h"
#include "overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.h"
#include "overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.h"
#include "overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.h"
#include "overlays/actors/ovl_Eff_Stk/z_eff_stk.h"
#include "transform_ids.h"

// @recomp Custom verts to extend the effects past the camera so they cover any aspect ratio.
Vtx time_override_verts[156] = {
	{{ {-165, 227, 0}, 0, {1229, 1024}, {183, 183, 183, 0} }},
	{{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }},
	{{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }},
	{{ {-165, 227, 0}, 0, {1229, 1024}, {183, 183, 183, 0} }},
	{{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }},
	{{ {0, 280, 0}, 0, {1024, 1024}, {183, 183, 183, 0} }},
	{{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }},
	{{ {-294, 405, 1000}, 0, {1229, 0}, {183, 183, 183, 255} }},
	{{ {0, 500, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }},
	{{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }},
	{{ {0, 500, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }},
	{{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }},
	{{ {-266, 87, 0}, 0, {1434, 1024}, {183, 183, 183, 0} }},
	{{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }},
	{{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }},
	{{ {-266, 87, 0}, 0, {1434, 1024}, {183, 183, 183, 0} }},
	{{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }},
	{{ {-165, 227, 0}, 0, {1229, 1024}, {183, 183, 183, 0} }},
	{{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }},
	{{ {-476, 155, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }},
	{{ {-294, 405, 1000}, 0, {1229, 0}, {183, 183, 183, 255} }},
	{{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }},
	{{ {-294, 405, 1000}, 0, {1229, 0}, {183, 183, 183, 255} }},
	{{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }},
	{{ {-266, -87, 0}, 0, {1638, 1024}, {183, 183, 183, 0} }},
	{{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }},
	{{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }},
	{{ {-266, -87, 0}, 0, {1638, 1024}, {183, 183, 183, 0} }},
	{{ {-266, 87, 0}, 0, {1434, 1024}, {183, 183, 183, 0} }},
	{{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }},
	{{ {-476, -155, 1000}, 0, {1638, 0}, {183, 183, 183, 255} }},
	{{ {-476, 155, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }},
	{{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }},
	{{ {-476, 155, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }},
	{{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }},
	{{ {-165, -227, 0}, 0, {1843, 1024}, {183, 183, 183, 0} }},
	{{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }},
	{{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }},
	{{ {-165, -227, 0}, 0, {1843, 1024}, {183, 183, 183, 0} }},
	{{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }},
	{{ {-266, -87, 0}, 0, {1638, 1024}, {183, 183, 183, 0} }},
	{{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }},
	{{ {-294, -405, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }},
	{{ {-476, -155, 1000}, 0, {1638, 0}, {183, 183, 183, 255} }},
	{{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }},
	{{ {-476, -155, 1000}, 0, {1638, 0}, {183, 183, 183, 255} }},
	{{ {0, -280, 0}, 0, {2048, 1024}, {183, 183, 183, 0} }},
	{{ {0, -350, 300}, 0, {2048, 512}, {183, 183, 183, 160} }},
	{{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }},
	{{ {-165, -227, 0}, 0, {1843, 1024}, {183, 183, 183, 0} }},
	{{ {0, -350, 300}, 0, {2048, 512}, {183, 183, 183, 160} }},
	{{ {0, -500, 1000}, 0, {2048, 0}, {183, 183, 183, 255} }},
	{{ {-294, -405, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }},
	{{ {0, -350, 300}, 0, {2048, 512}, {183, 183, 183, 160} }},
	{{ {-294, -405, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }},
	{{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }},
	{{ {165, -227, 0}, 0, {205, 1024}, {183, 183, 183, 0} }},
	{{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }},
	{{ {0, -350, 300}, 0, {0, 512}, {183, 183, 183, 160} }},
	{{ {165, -227, 0}, 0, {205, 1024}, {183, 183, 183, 0} }},
	{{ {0, -350, 300}, 0, {0, 512}, {183, 183, 183, 160} }},
	{{ {0, -280, 0}, 0, {0, 1024}, {183, 183, 183, 0} }},
	{{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }},
	{{ {294, -405, 1000}, 0, {205, 0}, {183, 183, 183, 255} }},
	{{ {0, -500, 1000}, 0, {0, 0}, {183, 183, 183, 255} }},
	{{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }},
	{{ {0, -500, 1000}, 0, {0, 0}, {183, 183, 183, 255} }},
	{{ {0, -350, 300}, 0, {0, 512}, {183, 183, 183, 160} }},
	{{ {266, -87, 0}, 0, {410, 1024}, {183, 183, 183, 0} }},
	{{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }},
	{{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }},
	{{ {266, -87, 0}, 0, {410, 1024}, {183, 183, 183, 0} }},
	{{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }},
	{{ {165, -227, 0}, 0, {205, 1024}, {183, 183, 183, 0} }},
	{{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }},
	{{ {476, -155, 1000}, 0, {410, 0}, {183, 183, 183, 255} }},
	{{ {294, -405, 1000}, 0, {205, 0}, {183, 183, 183, 255} }},
	{{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }},
	{{ {294, -405, 1000}, 0, {205, 0}, {183, 183, 183, 255} }},
	{{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }},
	{{ {266, 87, 0}, 0, {614, 1024}, {183, 183, 183, 0} }},
	{{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }},
	{{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }},
	{{ {266, 87, 0}, 0, {614, 1024}, {183, 183, 183, 0} }},
	{{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }},
	{{ {266, -87, 0}, 0, {410, 1024}, {183, 183, 183, 0} }},
	{{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }},
	{{ {476, 155, 1000}, 0, {614, 0}, {183, 183, 183, 255} }},
	{{ {476, -155, 1000}, 0, {410, 0}, {183, 183, 183, 255} }},
	{{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }},
	{{ {165, 227, 0}, 0, {819, 1024}, {183, 183, 183, 0} }},
	{{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }},
	{{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }},
	{{ {165, 227, 0}, 0, {819, 1024}, {183, 183, 183, 0} }},
	{{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }},
	{{ {266, 87, 0}, 0, {614, 1024}, {183, 183, 183, 0} }},
	{{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }},
	{{ {294, 405, 1000}, 0, {819, 0}, {183, 183, 183, 255} }},
	{{ {476, 155, 1000}, 0, {614, 0}, {183, 183, 183, 255} }},
	{{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }},
	{{ {476, 155, 1000}, 0, {614, 0}, {183, 183, 183, 255} }},
	{{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }},
	{{ {0, 280, 0}, 0, {1024, 1024}, {183, 183, 183, 0} }},
	{{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }},
	{{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }},
	{{ {0, 280, 0}, 0, {1024, 1024}, {183, 183, 183, 0} }},
	{{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }},
	{{ {165, 227, 0}, 0, {819, 1024}, {183, 183, 183, 0} }},
	{{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }},
	{{ {0, 500, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }},
	{{ {294, 405, 1000}, 0, {819, 0}, {183, 183, 183, 255} }},
	{{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }},
	{{ {294, 405, 1000}, 0, {819, 0}, {183, 183, 183, 255} }},
	{{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }},
	{{ {-294, 405, 1000}, 0, {1229, 0}, {169, 218, 84, 255} }},
	{{ {-476, 155, 1000}, 0, {1434, 0}, {30, 58, 147, 255} }},
	{{ {-758, 247, 2422}, 0, {1373, -1039}, {182, 183, 183, 255} }},
	{{ {-468, 645, 2422}, 0, {1168, -1039}, {191, 190, 169, 255} }},
	{{ {294, -405, 1000}, 0, {205, 0}, {9, 53, 141, 255} }},
	{{ {476, -155, 1000}, 0, {410, 0}, {228, 185, 101, 255} }},
	{{ {758, -247, 2422}, 0, {349, -1039}, {183, 182, 183, 255} }},
	{{ {468, -645, 2422}, 0, {144, -1039}, {179, 169, 206, 255} }},
	{{ {476, 155, 1000}, 0, {614, 0}, {132, 13, 230, 255} }},
	{{ {294, 405, 1000}, 0, {819, 0}, {245, 133, 27, 255} }},
	{{ {468, 645, 2422}, 0, {758, -1039}, {183, 183, 182, 255} }},
	{{ {476, 155, 1000}, 0, {614, 0}, {132, 13, 230, 255} }},
	{{ {468, 645, 2422}, 0, {758, -1039}, {183, 183, 182, 255} }},
	{{ {758, 247, 2422}, 0, {553, -1039}, {198, 165, 189, 255} }},
	{{ {294, 405, 1000}, 0, {819, 0}, {139, 219, 32, 255} }},
	{{ {0, 500, 1000}, 0, {1024, 0}, {58, 149, 220, 255} }},
	{{ {0, 796, 2422}, 0, {964, -1039}, {183, 183, 182, 255} }},
	{{ {468, 645, 2422}, 0, {758, -1039}, {206, 174, 173, 255} }},
	{{ {-476, -155, 1000}, 0, {1638, 0}, {197, 146, 231, 255} }},
	{{ {-294, -405, 1000}, 0, {1843, 0}, {138, 232, 215, 255} }},
	{{ {-468, -645, 2422}, 0, {1782, -1039}, {182, 182, 183, 255} }},
	{{ {-758, -247, 2422}, 0, {1577, -1039}, {174, 195, 181, 255} }},
	{{ {-294, -405, 1000}, 0, {1843, 0}, {9, 157, 177, 255} }},
	{{ {0, -500, 1000}, 0, {2048, 0}, {170, 166, 25, 255} }},
	{{ {0, -796, 2422}, 0, {1988, -1039}, {183, 182, 183, 255} }},
	{{ {-468, -645, 2422}, 0, {1782, -1039}, {172, 183, 195, 255} }},
	{{ {-476, 155, 1000}, 0, {1434, 0}, {159, 188, 45, 255} }},
	{{ {-476, -155, 1000}, 0, {1638, 0}, {186, 54, 165, 255} }},
	{{ {-758, -247, 2422}, 0, {1578, -1039}, {182, 183, 183, 255} }},
	{{ {-758, 247, 2422}, 0, {1374, -1039}, {184, 193, 173, 255} }},
	{{ {0, -500, 1000}, 0, {0, 0}, {49, 230, 142, 255} }},
	{{ {294, -405, 1000}, 0, {205, 0}, {222, 163, 79, 255} }},
	{{ {468, -645, 2422}, 0, {144, -1039}, {183, 182, 183, 255} }},
	{{ {0, -796, 2422}, 0, {-60, -1039}, {173, 175, 204, 255} }},
	{{ {476, -155, 1000}, 0, {410, 0}, {182, 64, 175, 255} }},
	{{ {476, 155, 1000}, 0, {614, 0}, {214, 169, 82, 255} }},
	{{ {758, 247, 2422}, 0, {554, -1039}, {183, 183, 182, 255} }},
	{{ {758, -247, 2422}, 0, {350, -1039}, {187, 165, 201, 255} }},
	{{ {0, 500, 1000}, 0, {1024, 0}, {169, 211, 81, 255} }},
	{{ {-294, 405, 1000}, 0, {1229, 0}, {89, 233, 168, 255} }},
	{{ {-468, 645, 2422}, 0, {1168, -1039}, {182, 183, 182, 255} }},
	{{ {0, 796, 2422}, 0, {964, -1039}, {198, 185, 168, 255} }},
};
Gfx time_override_dl[] = {
	gsSPVertex(time_override_verts + 0, 32, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
	gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0),
	gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0),
	gsSP2Triangles(24, 25, 26, 0, 27, 26, 28, 0),
	gsSP1Triangle(29, 30, 31, 0),
	gsSPVertex(time_override_verts + 32, 30, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
	gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0),
	gsSP2Triangles(12, 13, 5, 0, 14, 15, 16, 0),
	gsSP2Triangles(14, 16, 17, 0, 18, 19, 20, 0),
	gsSP2Triangles(21, 22, 23, 0, 24, 25, 26, 0),
	gsSP1Triangle(27, 28, 29, 0),
	gsSPVertex(time_override_verts + 62, 31, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
	gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0),
	gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0),
	gsSP2Triangles(24, 25, 26, 0, 24, 26, 27, 0),
	gsSP1Triangle(28, 29, 30, 0),
	gsSPVertex(time_override_verts + 93, 32, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
	gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0),
	gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0),
	gsSP2Triangles(21, 23, 24, 0, 25, 26, 27, 0),
	gsSP2Triangles(25, 27, 28, 0, 29, 30, 31, 0),
	gsSPVertex(time_override_verts + 125, 31, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
	gsSP2Triangles(3, 5, 6, 0, 7, 8, 9, 0),
	gsSP2Triangles(7, 9, 10, 0, 11, 12, 13, 0),
	gsSP2Triangles(11, 13, 14, 0, 15, 16, 17, 0),
	gsSP2Triangles(15, 17, 18, 0, 19, 20, 21, 0),
	gsSP2Triangles(19, 21, 22, 0, 23, 24, 25, 0),
	gsSP2Triangles(23, 25, 26, 0, 27, 28, 29, 0),
	gsSP1Triangle(27, 29, 30, 0),
	gsSPEndDisplayList(),
};

Vtx epona_override_verts[100] = {
	{{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }},
	{{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }},
	{{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }},
	{{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }},
	{{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }},
	{{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }},
	{{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }},
	{{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }},
	{{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }},
	{{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }},
	{{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }},
	{{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }},
	{{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }},
	{{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }},
	{{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }},
	{{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }},
	{{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }},
	{{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }},
	{{ {0, -150, 0}, 0, {4096, 2048}, {183, 183, 183, 0} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }},
	{{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }},
	{{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }},
	{{ {93, -285, 1000}, 0, {4301, 0}, {183, 183, 183, 255} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }},
	{{ {0, -150, 0}, 0, {4096, 2048}, {183, 183, 183, 0} }},
	{{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }},
	{{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }},
	{{ {93, -285, 1000}, 0, {205, 0}, {183, 183, 183, 255} }},
	{{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }},
	{{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }},
	{{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }},
	{{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }},
	{{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }},
	{{ {93, -285, 1000}, 0, {205, 0}, {183, 183, 183, 255} }},
	{{ {0, -150, 0}, 0, {0, 2048}, {183, 183, 183, 0} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {170, 213, 83, 255} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {234, 71, 153, 255} }},
	{{ {-447, 0, 2021}, 0, {2971, -2092}, {182, 181, 186, 255} }},
	{{ {-362, 262, 2021}, 0, {2561, -2092}, {183, 184, 181, 255} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {239, 135, 220, 255} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {142, 201, 253, 255} }},
	{{ {-139, -425, 2021}, 0, {3791, -2092}, {185, 181, 182, 255} }},
	{{ {-362, -262, 2021}, 0, {3381, -2092}, {181, 184, 183, 255} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {147, 50, 214, 255} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {211, 150, 53, 255} }},
	{{ {362, 262, 2021}, 0, {1333, -2092}, {181, 185, 181, 255} }},
	{{ {447, 0, 2021}, 0, {923, -2092}, {184, 179, 185, 255} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {231, 85, 165, 255} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {208, 187, 95, 255} }},
	{{ {447, 0, 2021}, 0, {923, -2092}, {183, 185, 181, 255} }},
	{{ {362, -262, 2021}, 0, {513, -2092}, {182, 180, 186, 255} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {174, 164, 31, 255} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {150, 25, 191, 255} }},
	{{ {-362, -262, 2021}, 0, {3381, -2092}, {183, 180, 184, 255} }},
	{{ {-447, 0, 2021}, 0, {2971, -2092}, {182, 184, 181, 255} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {58, 185, 168, 255} }},
	{{ {93, -285, 1000}, 0, {4301, 0}, {192, 165, 60, 255} }},
	{{ {139, -425, 2021}, 0, {4200, -2092}, {184, 183, 181, 255} }},
	{{ {-139, -425, 2021}, 0, {3790, -2092}, {180, 182, 185, 255} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {133, 235, 21, 255} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {13, 130, 245, 255} }},
	{{ {139, 425, 2021}, 0, {1743, -2092}, {180, 185, 184, 255} }},
	{{ {362, 262, 2021}, 0, {1333, -2092}, {186, 180, 182, 255} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {190, 217, 101, 255} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {67, 23, 151, 255} }},
	{{ {-362, 262, 2021}, 0, {2561, -2092}, {180, 181, 187, 255} }},
	{{ {-139, 425, 2021}, 0, {2153, -2092}, {184, 183, 181, 255} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {171, 203, 78, 255} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {77, 183, 186, 255} }},
	{{ {-139, 425, 2021}, 0, {2152, -2092}, {179, 183, 186, 255} }},
	{{ {139, 425, 2021}, 0, {1742, -2092}, {185, 182, 181, 255} }},
	{{ {93, -285, 1000}, 0, {205, 0}, {58, 29, 147, 255} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {221, 182, 97, 255} }},
	{{ {362, -262, 2021}, 0, {513, -2092}, {184, 184, 181, 255} }},
	{{ {139, -425, 2021}, 0, {105, -2092}, {181, 181, 186, 255} }},
};
Gfx epona_override_dl[] = {
	gsSPVertex(epona_override_verts + 0, 30, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
	gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0),
	gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0),
	gsSP2Triangles(24, 25, 26, 0, 27, 28, 29, 0),
	gsSPVertex(epona_override_verts + 30, 30, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
	gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0),
	gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0),
	gsSP2Triangles(24, 25, 26, 0, 27, 28, 29, 0),
	gsSPVertex(epona_override_verts + 60, 32, 0),
	gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
	gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
	gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0),
	gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0),
	gsSP2Triangles(16, 17, 18, 0, 16, 18, 19, 0),
	gsSP2Triangles(20, 21, 22, 0, 20, 22, 23, 0),
	gsSP2Triangles(24, 25, 26, 0, 24, 26, 27, 0),
	gsSP2Triangles(28, 29, 30, 0, 28, 30, 31, 0),
	gsSPVertex(epona_override_verts + 92, 8, 0),
	gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
	gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
	gsSPEndDisplayList(),
};

Vtx saria_override_verts[100] = {
	{{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }},
	{{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }},
	{{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }},
	{{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }},
	{{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }},
	{{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }},
	{{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }},
	{{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }},
	{{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }},
	{{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }},
	{{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }},
	{{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }},
	{{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }},
	{{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }},
	{{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }},
	{{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }},
	{{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }},
	{{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }},
	{{ {0, -150, 0}, 0, {4096, 2048}, {183, 183, 183, 0} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }},
	{{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }},
	{{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }},
	{{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }},
	{{ {93, -285, 1000}, 0, {205, 0}, {183, 183, 183, 255} }},
	{{ {0, -150, 0}, 0, {0, 2048}, {183, 183, 183, 0} }},
	{{ {93, -285, 1000}, 0, {4301, 0}, {183, 183, 183, 255} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }},
	{{ {0, -150, 0}, 0, {4096, 2048}, {183, 183, 183, 0} }},
	{{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }},
	{{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }},
	{{ {93, -285, 1000}, 0, {205, 0}, {183, 183, 183, 255} }},
	{{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }},
	{{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }},
	{{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }},
	{{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {132, 235, 21, 255} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {13, 130, 245, 255} }},
	{{ {142, 436, 2178}, 0, {1843, 0}, {180, 186, 183, 255} }},
	{{ {372, 270, 2178}, 0, {1434, 0}, {186, 181, 181, 255} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {174, 164, 31, 255} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {149, 25, 192, 255} }},
	{{ {-372, -270, 2178}, 0, {3482, 0}, {183, 180, 185, 255} }},
	{{ {-459, 0, 2178}, 0, {3072, 0}, {182, 184, 182, 255} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {232, 84, 164, 255} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {207, 187, 95, 255} }},
	{{ {459, 0, 2178}, 0, {1024, 0}, {183, 184, 180, 255} }},
	{{ {372, -270, 2178}, 0, {614, 0}, {183, 179, 186, 255} }},
	{{ {93, -285, 1000}, 0, {205, 0}, {59, 28, 147, 255} }},
	{{ {243, -176, 1000}, 0, {614, 0}, {221, 183, 97, 255} }},
	{{ {372, -270, 2178}, 0, {614, 0}, {184, 183, 181, 255} }},
	{{ {142, -436, 2178}, 0, {205, 0}, {181, 180, 187, 255} }},
	{{ {93, 285, 1000}, 0, {1843, 0}, {171, 203, 78, 255} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {77, 184, 186, 255} }},
	{{ {-142, 436, 2178}, 0, {2253, 0}, {179, 184, 185, 255} }},
	{{ {142, 436, 2178}, 0, {1843, 0}, {185, 183, 180, 255} }},
	{{ {-93, 285, 1000}, 0, {2253, 0}, {190, 217, 101, 255} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {67, 24, 151, 255} }},
	{{ {-372, 270, 2178}, 0, {2662, 0}, {180, 182, 187, 255} }},
	{{ {-142, 436, 2178}, 0, {2253, 0}, {184, 184, 180, 255} }},
	{{ {-243, -176, 1000}, 0, {3482, 0}, {239, 135, 221, 255} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {142, 201, 253, 255} }},
	{{ {-142, -436, 2178}, 0, {3891, 0}, {185, 181, 183, 255} }},
	{{ {-372, -270, 2178}, 0, {3482, 0}, {180, 184, 184, 255} }},
	{{ {300, 0, 1000}, 0, {1024, 0}, {147, 50, 213, 255} }},
	{{ {243, 176, 1000}, 0, {1434, 0}, {211, 149, 53, 255} }},
	{{ {372, 270, 2178}, 0, {1434, 0}, {182, 186, 180, 255} }},
	{{ {459, 0, 2178}, 0, {1024, 0}, {185, 179, 184, 255} }},
	{{ {-243, 176, 1000}, 0, {2662, 0}, {171, 212, 83, 255} }},
	{{ {-300, 0, 1000}, 0, {3072, 0}, {233, 71, 153, 255} }},
	{{ {-459, 0, 2178}, 0, {3072, 0}, {181, 181, 187, 255} }},
	{{ {-372, 270, 2178}, 0, {2662, 0}, {183, 184, 181, 255} }},
	{{ {-93, -285, 1000}, 0, {3891, 0}, {58, 184, 169, 255} }},
	{{ {93, -285, 1000}, 0, {4301, 0}, {192, 165, 61, 255} }},
	{{ {142, -436, 2178}, 0, {4301, 0}, {184, 182, 181, 255} }},
	{{ {-142, -436, 2178}, 0, {3891, 0}, {180, 182, 186, 255} }},
};
Gfx saria_override_dl[] = {
	gsSPVertex(saria_override_verts + 0, 30, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
	gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0),
	gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0),
	gsSP2Triangles(24, 25, 26, 0, 27, 28, 29, 0),
	gsSPVertex(saria_override_verts + 30, 30, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
	gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0),
	gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0),
	gsSP2Triangles(24, 25, 26, 0, 27, 28, 29, 0),
	gsSPVertex(saria_override_verts + 60, 32, 0),
	gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
	gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
	gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0),
	gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0),
	gsSP2Triangles(16, 17, 18, 0, 16, 18, 19, 0),
	gsSP2Triangles(20, 21, 22, 0, 20, 22, 23, 0),
	gsSP2Triangles(24, 25, 26, 0, 24, 26, 27, 0),
	gsSP2Triangles(28, 29, 30, 0, 28, 30, 31, 0),
	gsSPVertex(saria_override_verts + 92, 8, 0),
	gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
	gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
	gsSPEndDisplayList(),
};

Vtx scarecrow_override_verts[49] = {
	{{ {88, 121, 0}, 0, {819, 504}, {255, 255, 255, 0} }},
	{{ {243, 176, 1000}, 0, {717, -8}, {255, 255, 255, 255} }},
	{{ {143, 46, 0}, 0, {614, 504}, {255, 255, 255, 0} }},
	{{ {0, 150, 0}, 0, {1024, 504}, {255, 255, 255, 0} }},
	{{ {93, 285, 1000}, 0, {922, -8}, {255, 255, 255, 255} }},
	{{ {-88, 121, 0}, 0, {1229, 504}, {255, 255, 255, 0} }},
	{{ {-93, 285, 1000}, 0, {1126, -8}, {255, 255, 255, 255} }},
	{{ {-143, 46, 0}, 0, {1434, 504}, {255, 255, 255, 0} }},
	{{ {-243, 176, 1000}, 0, {1331, -8}, {255, 255, 255, 255} }},
	{{ {-143, -46, 0}, 0, {1638, 504}, {255, 255, 255, 0} }},
	{{ {-300, 0, 1000}, 0, {1536, -8}, {255, 255, 255, 255} }},
	{{ {-88, -121, 0}, 0, {1843, 504}, {255, 255, 255, 0} }},
	{{ {-243, -176, 1000}, 0, {1741, -8}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {2048, 504}, {255, 255, 255, 0} }},
	{{ {-93, -285, 1000}, 0, {1946, -8}, {255, 255, 255, 255} }},
	{{ {88, -121, 0}, 0, {205, 504}, {255, 255, 255, 0} }},
	{{ {93, -285, 1000}, 0, {102, -8}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {0, 504}, {255, 255, 255, 0} }},
	{{ {143, -46, 0}, 0, {410, 504}, {255, 255, 255, 0} }},
	{{ {243, -176, 1000}, 0, {307, -8}, {255, 255, 255, 255} }},
	{{ {300, 0, 1000}, 0, {512, -8}, {255, 255, 255, 255} }},
	{{ {355, 257, 2036}, 0, {670, -538}, {255, 255, 255, 255} }},
	{{ {439, 0, 2036}, 0, {465, -538}, {255, 255, 255, 255} }},
	{{ {136, 417, 2036}, 0, {875, -538}, {255, 255, 255, 255} }},
	{{ {355, 257, 2036}, 0, {669, -538}, {255, 255, 255, 255} }},
	{{ {-136, 417, 2036}, 0, {1079, -538}, {255, 255, 255, 255} }},
	{{ {136, 417, 2036}, 0, {875, -538}, {255, 255, 255, 255} }},
	{{ {-355, 257, 2036}, 0, {1283, -538}, {255, 255, 255, 255} }},
	{{ {-136, 417, 2036}, 0, {1079, -538}, {255, 255, 255, 255} }},
	{{ {-439, 0, 2036}, 0, {1489, -538}, {255, 255, 255, 255} }},
	{{ {-355, 257, 2036}, 0, {1284, -538}, {255, 255, 255, 255} }},
	{{ {-355, -257, 2036}, 0, {1694, -538}, {255, 255, 255, 255} }},
	{{ {-243, -176, 1000}, 0, {1741, -8}, {255, 255, 255, 255} }},
	{{ {-93, -285, 1000}, 0, {1946, -8}, {255, 255, 255, 255} }},
	{{ {-136, -417, 2036}, 0, {1899, -538}, {255, 255, 255, 255} }},
	{{ {-355, -257, 2036}, 0, {1693, -538}, {255, 255, 255, 255} }},
	{{ {93, -285, 1000}, 0, {2150, -8}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {2048, 504}, {255, 255, 255, 0} }},
	{{ {136, -417, 2036}, 0, {2103, -538}, {255, 255, 255, 255} }},
	{{ {-136, -417, 2036}, 0, {1899, -538}, {255, 255, 255, 255} }},
	{{ {243, -176, 1000}, 0, {307, -8}, {255, 255, 255, 255} }},
	{{ {93, -285, 1000}, 0, {102, -8}, {255, 255, 255, 255} }},
	{{ {88, -121, 0}, 0, {205, 504}, {255, 255, 255, 0} }},
	{{ {355, -257, 2036}, 0, {259, -538}, {255, 255, 255, 255} }},
	{{ {136, -417, 2036}, 0, {55, -538}, {255, 255, 255, 255} }},
	{{ {300, 0, 1000}, 0, {512, -8}, {255, 255, 255, 255} }},
	{{ {143, -46, 0}, 0, {410, 504}, {255, 255, 255, 0} }},
	{{ {439, 0, 2036}, 0, {465, -538}, {255, 255, 255, 255} }},
	{{ {355, -257, 2036}, 0, {260, -538}, {255, 255, 255, 255} }},
};
Gfx scarecrow_override_dl[] = {
	gsSPVertex(scarecrow_override_verts + 0, 32, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0),
	gsSP2Triangles(5, 6, 3, 0, 7, 8, 5, 0),
	gsSP2Triangles(9, 10, 7, 0, 11, 12, 9, 0),
	gsSP2Triangles(13, 14, 11, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 15, 0, 2, 20, 18, 0),
	gsSP2Triangles(1, 20, 2, 0, 20, 1, 21, 0),
	gsSP2Triangles(20, 21, 22, 0, 4, 1, 0, 0),
	gsSP2Triangles(1, 4, 23, 0, 1, 23, 24, 0),
	gsSP2Triangles(6, 4, 3, 0, 4, 6, 25, 0),
	gsSP2Triangles(4, 25, 26, 0, 8, 6, 5, 0),
	gsSP2Triangles(6, 8, 27, 0, 6, 27, 28, 0),
	gsSP2Triangles(10, 8, 7, 0, 8, 10, 29, 0),
	gsSP2Triangles(8, 29, 30, 0, 12, 10, 9, 0),
	gsSP2Triangles(10, 12, 31, 0, 10, 31, 29, 0),
	gsSP1Triangle(14, 12, 11, 0),
	gsSPVertex(scarecrow_override_verts + 32, 17, 0),
	gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
	gsSP2Triangles(4, 1, 5, 0, 1, 4, 6, 0),
	gsSP2Triangles(1, 6, 7, 0, 8, 9, 10, 0),
	gsSP2Triangles(9, 8, 11, 0, 9, 11, 12, 0),
	gsSP2Triangles(13, 8, 14, 0, 8, 13, 15, 0),
	gsSP1Triangle(8, 15, 16, 0),
	gsSPEndDisplayList(),
};

Vtx oceff5_override_verts[49] = {
	{{ {88, 121, 0}, 0, {819, 1024}, {255, 255, 255, 0} }},
	{{ {243, 176, 1000}, 0, {717, 0}, {255, 255, 255, 255} }},
	{{ {143, 46, 0}, 0, {614, 1024}, {255, 255, 255, 0} }},
	{{ {0, 150, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }},
	{{ {93, 285, 1000}, 0, {922, 0}, {255, 255, 255, 255} }},
	{{ {-88, 121, 0}, 0, {1229, 1024}, {255, 255, 255, 0} }},
	{{ {-93, 285, 1000}, 0, {1126, 0}, {255, 255, 255, 255} }},
	{{ {-143, 46, 0}, 0, {1434, 1024}, {255, 255, 255, 0} }},
	{{ {-243, 176, 1000}, 0, {1331, 0}, {255, 255, 255, 255} }},
	{{ {-143, -46, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }},
	{{ {-300, 0, 1000}, 0, {1536, 0}, {255, 255, 255, 255} }},
	{{ {-88, -121, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }},
	{{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
	{{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }},
	{{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }},
	{{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {0, 1024}, {255, 255, 255, 0} }},
	{{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }},
	{{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }},
	{{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }},
	{{ {318, 231, 1846}, 0, {685, -863}, {255, 255, 255, 255} }},
	{{ {393, 0, 1846}, 0, {480, -863}, {255, 255, 255, 255} }},
	{{ {122, 373, 1846}, 0, {890, -863}, {255, 255, 255, 255} }},
	{{ {318, 231, 1846}, 0, {685, -863}, {255, 255, 255, 255} }},
	{{ {-122, 373, 1846}, 0, {1094, -863}, {255, 255, 255, 255} }},
	{{ {122, 373, 1846}, 0, {890, -863}, {255, 255, 255, 255} }},
	{{ {-318, 231, 1846}, 0, {1299, -863}, {255, 255, 255, 255} }},
	{{ {-122, 373, 1846}, 0, {1094, -863}, {255, 255, 255, 255} }},
	{{ {-393, 0, 1846}, 0, {1504, -863}, {255, 255, 255, 255} }},
	{{ {-318, 231, 1846}, 0, {1299, -863}, {255, 255, 255, 255} }},
	{{ {-318, -231, 1846}, 0, {1709, -863}, {255, 255, 255, 255} }},
	{{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }},
	{{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }},
	{{ {-122, -373, 1846}, 0, {1914, -863}, {255, 255, 255, 255} }},
	{{ {-318, -231, 1846}, 0, {1709, -863}, {255, 255, 255, 255} }},
	{{ {93, -285, 1000}, 0, {2150, 0}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
	{{ {122, -373, 1846}, 0, {2118, -863}, {255, 255, 255, 255} }},
	{{ {-122, -373, 1846}, 0, {1914, -863}, {255, 255, 255, 255} }},
	{{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }},
	{{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }},
	{{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }},
	{{ {318, -231, 1846}, 0, {275, -863}, {255, 255, 255, 255} }},
	{{ {122, -373, 1846}, 0, {70, -863}, {255, 255, 255, 255} }},
	{{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }},
	{{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }},
	{{ {393, 0, 1846}, 0, {480, -863}, {255, 255, 255, 255} }},
	{{ {318, -231, 1846}, 0, {275, -863}, {255, 255, 255, 255} }},
};
Gfx oceff5_override_dl[] = {
	gsSPVertex(oceff5_override_verts + 0, 32, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0),
	gsSP2Triangles(5, 6, 3, 0, 7, 8, 5, 0),
	gsSP2Triangles(9, 10, 7, 0, 11, 12, 9, 0),
	gsSP2Triangles(13, 14, 11, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 15, 0, 2, 20, 18, 0),
	gsSP2Triangles(1, 20, 2, 0, 20, 1, 21, 0),
	gsSP2Triangles(20, 21, 22, 0, 4, 1, 0, 0),
	gsSP2Triangles(1, 4, 23, 0, 1, 23, 24, 0),
	gsSP2Triangles(6, 4, 3, 0, 4, 6, 25, 0),
	gsSP2Triangles(4, 25, 26, 0, 8, 6, 5, 0),
	gsSP2Triangles(6, 8, 27, 0, 6, 27, 28, 0),
	gsSP2Triangles(10, 8, 7, 0, 8, 10, 29, 0),
	gsSP2Triangles(8, 29, 30, 0, 12, 10, 9, 0),
	gsSP2Triangles(10, 12, 31, 0, 10, 31, 29, 0),
	gsSP1Triangle(14, 12, 11, 0),
	gsSPVertex(oceff5_override_verts + 32, 17, 0),
	gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
	gsSP2Triangles(4, 1, 5, 0, 1, 4, 6, 0),
	gsSP2Triangles(1, 6, 7, 0, 8, 9, 10, 0),
	gsSP2Triangles(9, 8, 11, 0, 9, 11, 12, 0),
	gsSP2Triangles(13, 8, 14, 0, 8, 13, 15, 0),
	gsSP1Triangle(8, 15, 16, 0),
	gsSPEndDisplayList(),
};

Vtx oceff6_override_verts[49] = {
	{{ {88, 121, 0}, 0, {819, 1024}, {255, 255, 255, 0} }},
	{{ {243, 176, 1000}, 0, {717, 0}, {255, 255, 255, 255} }},
	{{ {143, 46, 0}, 0, {614, 1024}, {255, 255, 255, 0} }},
	{{ {0, 150, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }},
	{{ {93, 285, 1000}, 0, {922, 0}, {255, 255, 255, 255} }},
	{{ {-88, 121, 0}, 0, {1229, 1024}, {255, 255, 255, 0} }},
	{{ {-93, 285, 1000}, 0, {1126, 0}, {255, 255, 255, 255} }},
	{{ {-143, 46, 0}, 0, {1434, 1024}, {255, 255, 255, 0} }},
	{{ {-243, 176, 1000}, 0, {1331, 0}, {255, 255, 255, 255} }},
	{{ {-143, -46, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }},
	{{ {-300, 0, 1000}, 0, {1536, 0}, {255, 255, 255, 255} }},
	{{ {-88, -121, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }},
	{{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
	{{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }},
	{{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }},
	{{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {0, 1024}, {255, 255, 255, 0} }},
	{{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }},
	{{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }},
	{{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }},
	{{ {319, 231, 2005}, 0, {685, -1024}, {255, 255, 255, 255} }},
	{{ {394, 0, 2005}, 0, {480, -1024}, {255, 255, 255, 255} }},
	{{ {122, 375, 2005}, 0, {890, -1024}, {255, 255, 255, 255} }},
	{{ {319, 231, 2005}, 0, {685, -1024}, {255, 255, 255, 255} }},
	{{ {-122, 375, 2005}, 0, {1094, -1024}, {255, 255, 255, 255} }},
	{{ {122, 375, 2005}, 0, {890, -1024}, {255, 255, 255, 255} }},
	{{ {-319, 231, 2005}, 0, {1299, -1024}, {255, 255, 255, 255} }},
	{{ {-122, 375, 2005}, 0, {1094, -1024}, {255, 255, 255, 255} }},
	{{ {-394, 0, 2005}, 0, {1504, -1024}, {255, 255, 255, 255} }},
	{{ {-319, 231, 2005}, 0, {1299, -1024}, {255, 255, 255, 255} }},
	{{ {-319, -231, 2005}, 0, {1709, -1024}, {255, 255, 255, 255} }},
	{{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }},
	{{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }},
	{{ {-122, -375, 2005}, 0, {1914, -1024}, {255, 255, 255, 255} }},
	{{ {-319, -231, 2005}, 0, {1709, -1024}, {255, 255, 255, 255} }},
	{{ {93, -285, 1000}, 0, {2150, 0}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
	{{ {122, -375, 2005}, 0, {2118, -1024}, {255, 255, 255, 255} }},
	{{ {-122, -375, 2005}, 0, {1914, -1024}, {255, 255, 255, 255} }},
	{{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }},
	{{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }},
	{{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }},
	{{ {319, -231, 2005}, 0, {275, -1024}, {255, 255, 255, 255} }},
	{{ {122, -375, 2005}, 0, {70, -1024}, {255, 255, 255, 255} }},
	{{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }},
	{{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }},
	{{ {394, 0, 2005}, 0, {480, -1024}, {255, 255, 255, 255} }},
	{{ {319, -231, 2005}, 0, {275, -1024}, {255, 255, 255, 255} }},
};
Gfx oceff6_override_dl[] = {
	gsSPVertex(oceff6_override_verts + 0, 32, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0),
	gsSP2Triangles(5, 6, 3, 0, 7, 8, 5, 0),
	gsSP2Triangles(9, 10, 7, 0, 11, 12, 9, 0),
	gsSP2Triangles(13, 14, 11, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 15, 0, 2, 20, 18, 0),
	gsSP2Triangles(1, 20, 2, 0, 20, 1, 21, 0),
	gsSP2Triangles(20, 21, 22, 0, 4, 1, 0, 0),
	gsSP2Triangles(1, 4, 23, 0, 1, 23, 24, 0),
	gsSP2Triangles(6, 4, 3, 0, 4, 6, 25, 0),
	gsSP2Triangles(4, 25, 26, 0, 8, 6, 5, 0),
	gsSP2Triangles(6, 8, 27, 0, 6, 27, 28, 0),
	gsSP2Triangles(10, 8, 7, 0, 8, 10, 29, 0),
	gsSP2Triangles(8, 29, 30, 0, 12, 10, 9, 0),
	gsSP2Triangles(10, 12, 31, 0, 10, 31, 29, 0),
	gsSP1Triangle(14, 12, 11, 0),
	gsSPVertex(oceff6_override_verts + 32, 17, 0),
	gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
	gsSP2Triangles(4, 1, 5, 0, 1, 4, 6, 0),
	gsSP2Triangles(1, 6, 7, 0, 8, 9, 10, 0),
	gsSP2Triangles(9, 8, 11, 0, 9, 11, 12, 0),
	gsSP2Triangles(13, 8, 14, 0, 8, 13, 15, 0),
	gsSP1Triangle(8, 15, 16, 0),
	gsSPEndDisplayList(),
};

Vtx healing_override_verts[49] = {
	{{ {88, 121, 0}, 0, {819, 1024}, {255, 255, 255, 0} }},
	{{ {243, 176, 1000}, 0, {717, 0}, {255, 255, 255, 255} }},
	{{ {143, 46, 0}, 0, {614, 1024}, {255, 255, 255, 0} }},
	{{ {0, 150, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }},
	{{ {93, 285, 1000}, 0, {922, 0}, {255, 255, 255, 255} }},
	{{ {-88, 121, 0}, 0, {1229, 1024}, {255, 255, 255, 0} }},
	{{ {-93, 285, 1000}, 0, {1126, 0}, {255, 255, 255, 255} }},
	{{ {-143, 46, 0}, 0, {1434, 1024}, {255, 255, 255, 0} }},
	{{ {-243, 176, 1000}, 0, {1331, 0}, {255, 255, 255, 255} }},
	{{ {-143, -46, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }},
	{{ {-300, 0, 1000}, 0, {1536, 0}, {255, 255, 255, 255} }},
	{{ {-88, -121, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }},
	{{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
	{{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }},
	{{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }},
	{{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {0, 1024}, {255, 255, 255, 0} }},
	{{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }},
	{{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }},
	{{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }},
	{{ {399, 289, 2168}, 0, {651, -1200}, {255, 255, 255, 255} }},
	{{ {493, 0, 2168}, 0, {446, -1200}, {255, 255, 255, 255} }},
	{{ {153, 468, 2168}, 0, {856, -1200}, {255, 255, 255, 255} }},
	{{ {399, 289, 2168}, 0, {651, -1200}, {255, 255, 255, 255} }},
	{{ {-153, 468, 2168}, 0, {1061, -1200}, {255, 255, 255, 255} }},
	{{ {153, 468, 2168}, 0, {857, -1200}, {255, 255, 255, 255} }},
	{{ {-399, 289, 2168}, 0, {1265, -1200}, {255, 255, 255, 255} }},
	{{ {-153, 468, 2168}, 0, {1060, -1200}, {255, 255, 255, 255} }},
	{{ {-493, 0, 2168}, 0, {1470, -1200}, {255, 255, 255, 255} }},
	{{ {-399, 289, 2168}, 0, {1265, -1200}, {255, 255, 255, 255} }},
	{{ {-399, -289, 2168}, 0, {1675, -1200}, {255, 255, 255, 255} }},
	{{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }},
	{{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }},
	{{ {-153, -468, 2168}, 0, {1880, -1200}, {255, 255, 255, 255} }},
	{{ {-399, -289, 2168}, 0, {1675, -1200}, {255, 255, 255, 255} }},
	{{ {93, -285, 1000}, 0, {2150, 0}, {255, 255, 255, 255} }},
	{{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
	{{ {153, -468, 2168}, 0, {2085, -1200}, {255, 255, 255, 255} }},
	{{ {-153, -468, 2168}, 0, {1881, -1200}, {255, 255, 255, 255} }},
	{{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }},
	{{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }},
	{{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }},
	{{ {399, -289, 2168}, 0, {241, -1200}, {255, 255, 255, 255} }},
	{{ {153, -468, 2168}, 0, {36, -1200}, {255, 255, 255, 255} }},
	{{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }},
	{{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }},
	{{ {493, 0, 2168}, 0, {446, -1200}, {255, 255, 255, 255} }},
	{{ {399, -289, 2168}, 0, {241, -1200}, {255, 255, 255, 255} }},
};
Gfx healing_override_dl[] = {
	gsSPVertex(healing_override_verts + 0, 32, 0),
	gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0),
	gsSP2Triangles(5, 6, 3, 0, 7, 8, 5, 0),
	gsSP2Triangles(9, 10, 7, 0, 11, 12, 9, 0),
	gsSP2Triangles(13, 14, 11, 0, 15, 16, 17, 0),
	gsSP2Triangles(18, 19, 15, 0, 2, 20, 18, 0),
	gsSP2Triangles(1, 20, 2, 0, 20, 1, 21, 0),
	gsSP2Triangles(20, 21, 22, 0, 4, 1, 0, 0),
	gsSP2Triangles(1, 4, 23, 0, 1, 23, 24, 0),
	gsSP2Triangles(6, 4, 3, 0, 4, 6, 25, 0),
	gsSP2Triangles(4, 25, 26, 0, 8, 6, 5, 0),
	gsSP2Triangles(6, 8, 27, 0, 6, 27, 28, 0),
	gsSP2Triangles(10, 8, 7, 0, 8, 10, 29, 0),
	gsSP2Triangles(8, 29, 30, 0, 12, 10, 9, 0),
	gsSP2Triangles(10, 12, 31, 0, 10, 31, 29, 0),
	gsSP1Triangle(14, 12, 11, 0),
	gsSPVertex(healing_override_verts + 32, 17, 0),
	gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
	gsSP2Triangles(4, 1, 5, 0, 1, 4, 6, 0),
	gsSP2Triangles(1, 6, 7, 0, 8, 9, 10, 0),
	gsSP2Triangles(9, 8, 11, 0, 9, 11, 12, 0),
	gsSP2Triangles(13, 8, 14, 0, 8, 13, 15, 0),
	gsSP1Triangle(8, 15, 16, 0),
	gsSPEndDisplayList(),
};

Vtx skull_kid_curse_1_override_verts[52] = { // 008A38
    {{ {71, 23, 0}, 0, {614, 1024}, {255, 255, 255, 0} }},
    {{ {121, 88, 500}, 0, {716, 0}, {255, 255, 255, 255} }},
    {{ {44, 61, 0}, 0, {819, 1024}, {255, 255, 255, 0} }},
    {{ {46, 143, 500}, 0, {921, 0}, {255, 255, 255, 255} }},
    {{ {0, 75, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }},
    {{ {-46, 143, 500}, 0, {1126, 0}, {255, 255, 255, 255} }},
    {{ {-44, 61, 0}, 0, {1228, 1024}, {255, 255, 255, 0} }},
    {{ {-121, 88, 500}, 0, {1331, 0}, {255, 255, 255, 255} }},
    {{ {-71, 23, 0}, 0, {1433, 1024}, {255, 255, 255, 0} }},
    {{ {-150, 0, 500}, 0, {1536, 0}, {255, 255, 255, 255} }},
    {{ {-71, -23, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }},
    {{ {-121, -88, 500}, 0, {1740, 0}, {255, 255, 255, 255} }},
    {{ {-44, -61, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }},
    {{ {-46, -143, 500}, 0, {1945, 0}, {255, 255, 255, 255} }},
    {{ {0, -75, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
    {{ {0, -75, 0}, 0, {0, 1024}, {255, 255, 255, 0} }},
    {{ {46, -143, 500}, 0, {102, 0}, {255, 255, 255, 255} }},
    {{ {44, -61, 0}, 0, {204, 1024}, {255, 255, 255, 0} }},
    {{ {121, -88, 500}, 0, {307, 0}, {255, 255, 255, 255} }},
    {{ {71, -23, 0}, 0, {409, 1024}, {255, 255, 255, 0} }},
    {{ {150, 0, 500}, 0, {512, 0}, {255, 255, 255, 255} }},
    {{ {248, 0, 1080}, 0, {580, -1192}, {255, 255, 255, 255} }},
    {{ {200, 146, 1080}, 0, {782, -1192}, {255, 255, 255, 255} }},
    {{ {200, 146, 1080}, 0, {782, -1192}, {255, 255, 255, 255} }},
    {{ {76, 237, 1080}, 0, {989, -1192}, {255, 255, 255, 255} }},
    {{ {76, 237, 1080}, 0, {988, -1192}, {255, 255, 255, 255} }},
    {{ {-76, 237, 1080}, 0, {1193, -1192}, {255, 255, 255, 255} }},
    {{ {-76, 237, 1080}, 0, {1194, -1192}, {255, 255, 255, 255} }},
    {{ {-200, 146, 1080}, 0, {1397, -1192}, {255, 255, 255, 255} }},
    {{ {-200, 146, 1080}, 0, {1397, -1192}, {255, 255, 255, 255} }},
    {{ {-248, 0, 1080}, 0, {1604, -1192}, {255, 255, 255, 255} }},
    {{ {-248, 0, 1080}, 0, {1604, -1192}, {255, 255, 255, 255} }},
    {{ {-121, -88, 500}, 0, {1740, 0}, {255, 255, 255, 255} }},
    {{ {-248, 0, 1080}, 0, {1604, -1192}, {255, 255, 255, 255} }},
    {{ {-200, -146, 1080}, 0, {1806, -1192}, {255, 255, 255, 255} }},
    {{ {-44, -61, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }},
    {{ {-46, -143, 500}, 0, {1945, 0}, {255, 255, 255, 255} }},
    {{ {-200, -146, 1080}, 0, {1806, -1192}, {255, 255, 255, 255} }},
    {{ {-76, -237, 1080}, 0, {2013, -1192}, {255, 255, 255, 255} }},
    {{ {0, -75, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
    {{ {46, -143, 500}, 0, {2150, 0}, {255, 255, 255, 255} }},
    {{ {-76, -237, 1080}, 0, {2012, -1192}, {255, 255, 255, 255} }},
    {{ {76, -237, 1080}, 0, {2217, -1192}, {255, 255, 255, 255} }},
    {{ {44, -61, 0}, 0, {204, 1024}, {255, 255, 255, 0} }},
    {{ {46, -143, 500}, 0, {102, 0}, {255, 255, 255, 255} }},
    {{ {121, -88, 500}, 0, {307, 0}, {255, 255, 255, 255} }},
    {{ {76, -237, 1080}, 0, {170, -1192}, {255, 255, 255, 255} }},
    {{ {200, -146, 1080}, 0, {373, -1192}, {255, 255, 255, 255} }},
    {{ {71, -23, 0}, 0, {409, 1024}, {255, 255, 255, 0} }},
    {{ {150, 0, 500}, 0, {512, 0}, {255, 255, 255, 255} }},
    {{ {200, -146, 1080}, 0, {373, -1192}, {255, 255, 255, 255} }},
    {{ {248, 0, 1080}, 0, {580, -1192}, {255, 255, 255, 255} }},
};

extern u64 object_stk2_Tex_008B50[];
extern u64 object_stk2_Tex_008B50[];


Gfx skull_kid_curse_1_override_dl[] = { // 008A38
    gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
    gsDPPipeSync(),
    gsDPSetCombineLERP(TEXEL1, PRIMITIVE, PRIM_LOD_FRAC, TEXEL0, TEXEL1, 0, PRIM_LOD_FRAC, TEXEL0, PRIMITIVE,
                       ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, SHADE, 0),
    gsDPSetPrimColor(0, 0x80, 255, 255, 100, 255),
    gsDPSetEnvColor(255, 0, 150, 255),
    gsDPSetRenderMode(G_RM_PASS, G_RM_ZB_XLU_SURF2),
    gsDPSetTextureLUT(G_TT_NONE),
    gsDPLoadTextureBlock(object_stk2_Tex_008B50, G_IM_FMT_I, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP,
                         G_TX_NOMIRROR | G_TX_WRAP, 5, 6, 1, 15),
    gsDPLoadMultiBlock(object_stk2_Tex_008B50, 0x0000, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP,
                       G_TX_NOMIRROR | G_TX_WRAP, 5, 6, 15, 14),
    gsSPDisplayList(0x08000000),
    gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
    gsSPVertex(skull_kid_curse_1_override_verts + 0, 32, 0),
    gsSP2Triangles(0, 1, 2, 0, 2, 3, 4, 0),
    gsSP2Triangles(4, 5, 6, 0, 6, 7, 8, 0),
    gsSP2Triangles(8, 9, 10, 0, 10, 11, 12, 0),
    gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0),
    gsSP2Triangles(17, 18, 19, 0, 19, 20, 0, 0),
    gsSP2Triangles(0, 20, 1, 0, 1, 20, 21, 0),
    gsSP2Triangles(1, 21, 22, 0, 2, 1, 3, 0),
    gsSP2Triangles(3, 1, 23, 0, 3, 23, 24, 0),
    gsSP2Triangles(4, 3, 5, 0, 5, 3, 25, 0),
    gsSP2Triangles(5, 25, 26, 0, 6, 5, 7, 0),
    gsSP2Triangles(7, 5, 27, 0, 7, 27, 28, 0),
    gsSP2Triangles(8, 7, 9, 0, 9, 7, 29, 0),
    gsSP2Triangles(9, 29, 30, 0, 10, 9, 11, 0),
    gsSP1Triangle(11, 9, 31, 0),
    gsSPVertex(skull_kid_curse_1_override_verts + 32, 20, 0),
    gsSP2Triangles(0, 1, 2, 0, 3, 0, 4, 0),
    gsSP2Triangles(4, 0, 5, 0, 4, 5, 6, 0),
    gsSP2Triangles(7, 4, 8, 0, 8, 4, 9, 0),
    gsSP2Triangles(8, 9, 10, 0, 11, 12, 13, 0),
    gsSP2Triangles(13, 12, 14, 0, 13, 14, 15, 0),
    gsSP2Triangles(16, 13, 17, 0, 17, 13, 18, 0),
    gsSP1Triangle(17, 18, 19, 0),
    gsSPEndDisplayList(),
};

Vtx skull_kid_curse_2_override_verts[52] = { // 008920
    {{ {86, -28, 0}, 0, {409, 1024}, {255, 255, 255, 0} }},
    {{ {180, 0, 500}, 0, {512, 0}, {255, 255, 255, 255} }},
    {{ {86, 28, 0}, 0, {614, 1024}, {255, 255, 255, 0} }},
    {{ {53, -73, 0}, 0, {204, 1024}, {255, 255, 255, 0} }},
    {{ {146, -106, 500}, 0, {307, 0}, {255, 255, 255, 255} }},
    {{ {0, -90, 0}, 0, {0, 1024}, {255, 255, 255, 0} }},
    {{ {56, -171, 500}, 0, {102, 0}, {255, 255, 255, 255} }},
    {{ {-53, -73, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }},
    {{ {-56, -171, 500}, 0, {1945, 0}, {255, 255, 255, 255} }},
    {{ {0, -90, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
    {{ {-86, -28, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }},
    {{ {-146, -106, 500}, 0, {1740, 0}, {255, 255, 255, 255} }},
    {{ {-86, 28, 0}, 0, {1433, 1024}, {255, 255, 255, 0} }},
    {{ {-180, 0, 500}, 0, {1536, 0}, {255, 255, 255, 255} }},
    {{ {-53, 73, 0}, 0, {1228, 1024}, {255, 255, 255, 0} }},
    {{ {-146, 106, 500}, 0, {1331, 0}, {255, 255, 255, 255} }},
    {{ {0, 90, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }},
    {{ {-56, 171, 500}, 0, {1126, 0}, {255, 255, 255, 255} }},
    {{ {53, 73, 0}, 0, {819, 1024}, {255, 255, 255, 0} }},
    {{ {56, 171, 500}, 0, {921, 0}, {255, 255, 255, 255} }},
    {{ {146, 106, 500}, 0, {716, 0}, {255, 255, 255, 255} }},
    {{ {218, -159, 1080}, 0, {359, -1185}, {255, 255, 255, 255} }},
    {{ {269, 0, 1080}, 0, {562, -1185}, {255, 255, 255, 255} }},
    {{ {84, -256, 1080}, 0, {152, -1185}, {255, 255, 255, 255} }},
    {{ {218, -159, 1080}, 0, {359, -1185}, {255, 255, 255, 255} }},
    {{ {56, -171, 500}, 0, {2150, 0}, {255, 255, 255, 255} }},
    {{ {-84, -256, 1080}, 0, {1996, -1185}, {255, 255, 255, 255} }},
    {{ {84, -256, 1080}, 0, {2201, -1185}, {255, 255, 255, 255} }},
    {{ {-218, -159, 1080}, 0, {1792, -1185}, {255, 255, 255, 255} }},
    {{ {-84, -256, 1080}, 0, {1995, -1185}, {255, 255, 255, 255} }},
    {{ {-269, 0, 1080}, 0, {1586, -1185}, {255, 255, 255, 255} }},
    {{ {-218, -159, 1080}, 0, {1791, -1185}, {255, 255, 255, 255} }},
    {{ {-180, 0, 500}, 0, {1536, 0}, {255, 255, 255, 255} }},
    {{ {-146, 106, 500}, 0, {1331, 0}, {255, 255, 255, 255} }},
    {{ {-218, 159, 1080}, 0, {1383, -1185}, {255, 255, 255, 255} }},
    {{ {-269, 0, 1080}, 0, {1586, -1185}, {255, 255, 255, 255} }},
    {{ {-53, 73, 0}, 0, {1228, 1024}, {255, 255, 255, 0} }},
    {{ {-56, 171, 500}, 0, {1126, 0}, {255, 255, 255, 255} }},
    {{ {-84, 256, 1080}, 0, {1176, -1185}, {255, 255, 255, 255} }},
    {{ {-218, 159, 1080}, 0, {1383, -1185}, {255, 255, 255, 255} }},
    {{ {0, 90, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }},
    {{ {56, 171, 500}, 0, {921, 0}, {255, 255, 255, 255} }},
    {{ {84, 256, 1080}, 0, {972, -1185}, {255, 255, 255, 255} }},
    {{ {-84, 256, 1080}, 0, {1177, -1185}, {255, 255, 255, 255} }},
    {{ {53, 73, 0}, 0, {819, 1024}, {255, 255, 255, 0} }},
    {{ {146, 106, 500}, 0, {716, 0}, {255, 255, 255, 255} }},
    {{ {218, 159, 1080}, 0, {768, -1185}, {255, 255, 255, 255} }},
    {{ {84, 256, 1080}, 0, {971, -1185}, {255, 255, 255, 255} }},
    {{ {86, 28, 0}, 0, {614, 1024}, {255, 255, 255, 0} }},
    {{ {180, 0, 500}, 0, {512, 0}, {255, 255, 255, 255} }},
    {{ {269, 0, 1080}, 0, {562, -1185}, {255, 255, 255, 255} }},
    {{ {218, 159, 1080}, 0, {767, -1185}, {255, 255, 255, 255} }},
};

extern u64 object_stk2_Tex_009750[];
extern u64 object_stk2_Tex_009350[];

Gfx skull_kid_curse_2_override_dl[] = { // 008920
    gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
    gsDPPipeSync(),
    gsDPSetCombineLERP(TEXEL1, PRIMITIVE, PRIM_LOD_FRAC, TEXEL0, TEXEL1, 0, PRIM_LOD_FRAC, TEXEL0, PRIMITIVE,
                        ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, SHADE, 0),
    gsDPSetPrimColor(0, 0x80, 0, 0, 255, 255),
    gsDPSetEnvColor(0, 220, 0, 255),
    gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_XLU_INTER2),
    gsDPSetTextureLUT(G_TT_NONE),
    gsDPLoadTextureBlock(object_stk2_Tex_009750, G_IM_FMT_I, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP,
                            G_TX_MIRROR | G_TX_WRAP, 5, 6, 15, 14),
    gsDPLoadMultiBlock(object_stk2_Tex_009350, 0x0100, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP,
                        G_TX_NOMIRROR | G_TX_WRAP, 5, 5, 15, 1),
    gsSPDisplayList(0x09000000),
    gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
    gsSPVertex(skull_kid_curse_2_override_verts + 0, 32, 0),
    gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0),
    gsSP2Triangles(5, 6, 3, 0, 7, 8, 9, 0),
    gsSP2Triangles(10, 11, 7, 0, 12, 13, 10, 0),
    gsSP2Triangles(14, 15, 12, 0, 16, 17, 14, 0),
    gsSP2Triangles(18, 19, 16, 0, 2, 20, 18, 0),
    gsSP2Triangles(0, 4, 1, 0, 1, 4, 21, 0),
    gsSP2Triangles(1, 21, 22, 0, 3, 6, 4, 0),
    gsSP2Triangles(4, 6, 23, 0, 4, 23, 24, 0),
    gsSP2Triangles(9, 8, 25, 0, 25, 8, 26, 0),
    gsSP2Triangles(25, 26, 27, 0, 7, 11, 8, 0),
    gsSP2Triangles(8, 11, 28, 0, 8, 28, 29, 0),
    gsSP2Triangles(10, 13, 11, 0, 11, 13, 30, 0),
    gsSP2Triangles(11, 30, 31, 0, 12, 15, 13, 0),
    gsSPVertex(skull_kid_curse_2_override_verts + 32, 20, 0),
    gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
    gsSP2Triangles(4, 5, 1, 0, 1, 5, 6, 0),
    gsSP2Triangles(1, 6, 7, 0, 8, 9, 5, 0),
    gsSP2Triangles(5, 9, 10, 0, 5, 10, 11, 0),
    gsSP2Triangles(12, 13, 9, 0, 9, 13, 14, 0),
    gsSP2Triangles(9, 14, 15, 0, 16, 17, 13, 0),
    gsSP2Triangles(13, 17, 18, 0, 13, 18, 19, 0),
    gsSPEndDisplayList(),
};

// Sets the flag to 1 for any vertex that has an alpha of 255.
void set_vertex_flags(Vtx* verts, s32 count) {
    for (s32 i = 0; i < count; i++) {
        if (verts[i].v.cn[3] == 160) {
            verts[i].v.flag = 1;
        }
        else if (verts[i].v.cn[3] == 255) {
            verts[i].v.flag = 2;
        }
    }
}

// Sets the flags for every override vertex list.
void set_all_vertex_flags() {
    static bool flags_set = false;

    // Set the flags on all the vertices first if they haven't been set yet.
    if (!flags_set) {
        set_vertex_flags(time_override_verts, ARRAY_COUNT(time_override_verts));
        set_vertex_flags(epona_override_verts, ARRAY_COUNT(epona_override_verts));
        set_vertex_flags(saria_override_verts, ARRAY_COUNT(saria_override_verts));
        set_vertex_flags(scarecrow_override_verts, ARRAY_COUNT(scarecrow_override_verts));
        set_vertex_flags(oceff5_override_verts, ARRAY_COUNT(oceff5_override_verts));
        set_vertex_flags(oceff6_override_verts, ARRAY_COUNT(oceff6_override_verts));
        set_vertex_flags(healing_override_verts, ARRAY_COUNT(healing_override_verts));
        flags_set = true;
    }
}

// Patches the given DL to replace a vertex command at the given position with a branch to the new DL.
void patch_ocarina_effect(Actor* actor, Gfx* original_dl, u32 dl_offset, Gfx* override_dl) {
    Gfx* reloc_dl = (Gfx*)actor_relocate(actor, original_dl);

    set_all_vertex_flags();

    // Check if the DL hasn't been patched yet.
    if (reloc_dl[dl_offset].words.w0 >> 24 == G_VTX) {
        // Redirect the DL away from the original vertex command and to the override DL.
        gSPBranchList(&reloc_dl[dl_offset], override_dl);
    }
}

// Sets the alpha value for every vertex in the list with a set flag value.
void set_ocarina_vertex_alphas(Vtx* verts, s32 count, u8 alpha) {
    for (s32 i = 0; i < count; i++) {
        if (verts[i].v.flag) {
            verts[i].v.cn[3] = alpha;
        }
    }
}

extern Gfx sSongOfTimeFrustumMaterialDL[];

void OceffWipe_Draw(Actor* thisx, PlayState* play) {
    u32 scroll = play->state.frames & 0xFF;
    OceffWipe* this = (OceffWipe*)thisx;
    f32 z;
    s32 pad;
    u8 alphaTable[3];
    s32 i;
    Vec3f eye = GET_ACTIVE_CAM(play)->eye;
    Vtx* vtxPtr;
    Vec3f quakeOffset;

    // @recomp Tag the effect vertices if they haven't been already.
    set_all_vertex_flags();

    quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play));

    OPEN_DISPS(play->state.gfxCtx);

    if (this->counter < 32) {
        z = Math_SinS(this->counter << 9) * 1360.0f;
    } else {
        z = 1360.0f;
    }

    if (this->counter >= 80) {
        alphaTable[0] = 0;
        alphaTable[1] = (100 - this->counter) * 8;
        alphaTable[2] = (100 - this->counter) * 12;
    } else {
        alphaTable[0] = 0;
        alphaTable[1] = 160;
        alphaTable[2] = 255;
    }

    // @recomp Modify this loop to use the vertex's flag instead of a lookup table.
    for (i = 0; i < ARRAY_COUNT(time_override_verts); i++) {
        time_override_verts[i].v.cn[3] = alphaTable[time_override_verts[i].v.flag];
    }

    Gfx_SetupDL25_Xlu(play->state.gfxCtx);

    Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
    Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
    Matrix_ReplaceRotation(&play->billboardMtxF);
    Matrix_RotateXS(0x708, MTXMODE_APPLY);
    Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY);

    gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);

    if (this->actor.params != OCEFF_WIPE_ZL) {
        gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 170, 255, 255, 255);
        gDPSetEnvColor(POLY_XLU_DISP++, 0, 150, 255, 128);
    } else {
        gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 200, 255);
        gDPSetEnvColor(POLY_XLU_DISP++, 100, 0, 255, 128);
    }

    // @recomp Manual relocation, TODO remove when automated.
    gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, &sSongOfTimeFrustumMaterialDL));
    gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 0 - scroll, scroll * -2, 32,
                                                     32, 1, 0 - scroll, scroll * -2, 32, 32));
    // @recomp Use the new DL instead of the original.
    gSPDisplayList(POLY_XLU_DISP++, time_override_dl);

    CLOSE_DISPS(play->state.gfxCtx);
}

extern Gfx sEponaSongFrustumMaterialDL[];

void OceffWipe2_Draw(Actor* thisx, PlayState* play) {
    u32 scroll = play->state.frames & 0xFF;
    OceffWipe2* this = (OceffWipe2*)thisx;
    f32 z;
    u8 alpha;
    s32 pad[2];
    Vec3f eye = GET_ACTIVE_CAM(play)->eye;
    Vtx* vtxPtr;
    Vec3f quakeOffset;
    
    // @recomp Tag the effect vertices if they haven't been already.
    set_all_vertex_flags();

    quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play));

    if (this->timer < 32) {
        z = Math_SinS(this->timer * 0x200) * 1220.0f;
    } else {
        z = 1220.0f;
    }

    if (this->timer >= 80) {
        alpha = 12 * (100 - this->timer);
    } else {
        alpha = 255;
    }

    // @recomp Replace the set alpha loop with a vertex flag check instead.
    set_ocarina_vertex_alphas(epona_override_verts, ARRAY_COUNT(epona_override_verts), alpha);

    OPEN_DISPS(play->state.gfxCtx);

    Gfx_SetupDL25_Xlu(play->state.gfxCtx);

    Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
    Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
    Matrix_ReplaceRotation(&play->billboardMtxF);
    Matrix_RotateXS(0x708, MTXMODE_APPLY);
    Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY);

    gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
    gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 170, 255);
    gDPSetEnvColor(POLY_XLU_DISP++, 255, 100, 0, 128);
    // @recomp Manual relocation, TODO remove when automated.
    gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, sEponaSongFrustumMaterialDL));
    gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, scroll * 6, scroll * -6, 64,
                                                     64, 1, scroll * -6, 0, 64, 64));
    // @recomp Use the new DL instead of the original.
    gSPDisplayList(POLY_XLU_DISP++, epona_override_dl);

    CLOSE_DISPS(play->state.gfxCtx);
}

extern Gfx sSariaSongFrustrumMaterialDL[];

void OceffWipe3_Draw(Actor* thisx, PlayState* play) {
    u32 scroll = play->state.frames & 0xFFF;
    OceffWipe3* this = (OceffWipe3*)thisx;
    f32 z;
    u8 alpha;
    s32 pad[2];
    Vec3f eye = GET_ACTIVE_CAM(play)->eye;
    Vtx* vtxPtr;
    Vec3f quakeOffset;

    // @recomp Tag the effect vertices if they haven't been already.
    set_all_vertex_flags();

    quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play));

    if (this->counter < 32) {
        z = Math_SinS(this->counter * 512) * 1220.0f;
    } else {
        z = 1220.0f;
    }

    if (this->counter >= 80) {
        alpha = 12 * (100 - this->counter);
    } else {
        alpha = 255;
    }

    // @recomp Replace the set alpha loop with a vertex flag check instead.
    set_ocarina_vertex_alphas(saria_override_verts, ARRAY_COUNT(saria_override_verts), alpha);

    OPEN_DISPS(play->state.gfxCtx);

    Gfx_SetupDL25_Xlu(play->state.gfxCtx);
    Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
    Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
    Matrix_ReplaceRotation(&play->billboardMtxF);
    Matrix_RotateXS(0x708, MTXMODE_APPLY);
    Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY);

    gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
    gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 170, 255);
    gDPSetEnvColor(POLY_XLU_DISP++, 100, 200, 0, 128);
    // @recomp Manual relocation, TODO remove when automated.
    gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, &sSariaSongFrustrumMaterialDL));
    gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, 0, scroll * 12, scroll * -12, 64, 64, 1,
                                                     scroll * 8, scroll * -8, 64, 64));
    // @recomp Use the new DL instead of the original.
    gSPDisplayList(POLY_XLU_DISP++, saria_override_dl);

    CLOSE_DISPS(play->state.gfxCtx);
}

extern Gfx sScarecrowSongUnusedMaterialDL[];
extern Gfx sScarecrowSongMaterialDL[];
extern Gfx sScarecrowSongModelDL[];

void OceffWipe4_Draw(Actor* thisx, PlayState* play) {
    u32 scroll = play->state.frames & 0xFFF;
    OceffWipe4* this = (OceffWipe4*)thisx;
    f32 z;
    u8 alpha;
    s32 pad[2];
    Vec3f eye = GET_ACTIVE_CAM(play)->eye;
    Vec3f quakeOffset;

    // @recomp Apply the patch to the DL if necessary.
    patch_ocarina_effect(thisx, sScarecrowSongModelDL, 11, scarecrow_override_dl);

    quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play));

    if (this->counter < 16) {
        z = Math_SinS(this->counter * 0x400) * 1220.0f;
    } else {
        z = 1220.0f;
    }

    if (this->counter >= 30) {
        alpha = 12 * (50 - this->counter);
    } else {
        alpha = 255;
    }

    // @recomp Replace the set alpha loop with a vertex flag check instead.
    set_ocarina_vertex_alphas(scarecrow_override_verts, ARRAY_COUNT(scarecrow_override_dl), alpha);

    OPEN_DISPS(play->state.gfxCtx);

    Gfx_SetupDL25_Xlu(play->state.gfxCtx);

    Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
    Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
    Matrix_ReplaceRotation(&play->billboardMtxF);
    Matrix_RotateXS(0x708, MTXMODE_APPLY);
    Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY);

    gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);

    // @recomp Manual relocations, TODO remove when automated.
    if (this->actor.params == OCEFF_WIPE4_UNUSED) {
        gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, sScarecrowSongUnusedMaterialDL));
    } else {
        gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, sScarecrowSongMaterialDL));
    }

    gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, sScarecrowSongModelDL));
    gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, scroll * 2, scroll * -2, 32,
                                                     64, 1, scroll * -1, scroll, 32, 32));
    gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, &sScarecrowSongModelDL[11]));

    CLOSE_DISPS(play->state.gfxCtx);
}

static u8 sPrimColors[] = {
    255, 255, 200, 255, 255, 200, 200, 255, 255, 255, 255, 200, 255, 200, 255,
};

static u8 sEnvColors[] = {
    50, 200, 0, 255, 50, 0, 0, 100, 255, 255, 150, 0, 255, 0, 200,
};

extern Gfx gOceff5DL[];
extern AnimatedMaterial gOceff5TexAnim[];

void OceffWipe5_Draw(Actor* thisx, PlayState* play) {
    OceffWipe5* this = (OceffWipe5*)thisx;
    f32 z;
    s32 pad;
    s32 i;
    s32 pad2;
    Vec3f activeCamEye = GET_ACTIVE_CAM(play)->eye;
    Camera* activeCam = GET_ACTIVE_CAM(play);
    Vec3f quakeOffset;
    u8 alpha;
    s32 colorIndex = OCEFF_WIPE5_GET_SONG_TYPE(thisx) * 3;
    f32 phi_fv1 = 1220.0f;

    // @recomp Apply the patch to the DL if necessary.
    patch_ocarina_effect(thisx, gOceff5DL, 21, oceff5_override_dl);

    if ((((OCEFF_WIPE5_GET_SONG_TYPE(thisx) == 2) && (play->sceneId == SCENE_LABO)) &&
         ((play->csCtx.scriptIndex == 0) || (play->csCtx.scriptIndex == 1))) &&
        (play->csCtx.state != CS_STATE_IDLE)) {
        phi_fv1 = 1150.0f;
    }

    if (colorIndex >= 13) {
        colorIndex = 0;
    }

    quakeOffset = Camera_GetQuakeOffset(activeCam);

    if (this->counter < 32) {
        z = Math_SinS(this->counter << 9) * phi_fv1;
    } else {
        z = phi_fv1;
    }

    if (this->counter >= 80) {
        alpha = 12 * (100 - this->counter);
    } else {
        alpha = 255;
    }

    // @recomp Replace the set alpha loop with a vertex flag check instead.
    set_ocarina_vertex_alphas(oceff5_override_verts, ARRAY_COUNT(oceff5_override_verts), alpha);

    OPEN_DISPS(play->state.gfxCtx);

    Gfx_SetupDL25_Xlu(play->state.gfxCtx);

    Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z,
                     MTXMODE_NEW);
    Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
    Matrix_ReplaceRotation(&play->billboardMtxF);
    Matrix_RotateXS(0x708, MTXMODE_APPLY);
    Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY);

    gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
    gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sPrimColors[colorIndex], sPrimColors[colorIndex + 1],
                    sPrimColors[colorIndex + 2], 255);
    gDPSetEnvColor(POLY_XLU_DISP++, sEnvColors[colorIndex], sEnvColors[colorIndex + 1], sEnvColors[colorIndex + 2],
                   255);

    // @recomp Manual relocations, TODO remove when automated.
    AnimatedMat_Draw(play, (AnimatedMaterial*)actor_relocate(thisx, gOceff5TexAnim));
    gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, gOceff5DL));

    CLOSE_DISPS(play->state.gfxCtx);
}

extern Gfx gOceff6DL[];
extern AnimatedMaterial ovl_Oceff_Wipe6_Matanimheader_000338[];

void OceffWipe6_Draw(Actor* thisx, PlayState* play) {
    OceffWipe6* this = (OceffWipe6*)thisx;
    f32 z;
    u8 alpha;
    s32 i;
    s32 counter;
    Vec3f activeCamEye;
    s32 pad;
    Vec3f quakeOffset;
    s32 pad2;

    // @recomp Apply the patch to the DL if necessary.
    patch_ocarina_effect(thisx, gOceff6DL, 23, oceff6_override_dl);

    activeCamEye = GET_ACTIVE_CAM(play)->eye;
    quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play));

    if (this->counter < 32) {
        counter = this->counter;
        z = Math_SinS(counter * 0x200) * 1220.0f;
    } else {
        z = 1220.0f;
    }

    if (this->counter >= 80) {
        alpha = 12 * (100 - this->counter);
    } else {
        alpha = 255;
    }

    // @recomp Replace the set alpha loop with a vertex flag check instead.
    set_ocarina_vertex_alphas(oceff6_override_verts, ARRAY_COUNT(oceff6_override_verts), alpha);

    OPEN_DISPS(play->state.gfxCtx);

    Gfx_SetupDL25_Xlu(play->state.gfxCtx);
    Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z,
                     MTXMODE_NEW);
    Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
    Matrix_ReplaceRotation(&play->billboardMtxF);
    Matrix_RotateXS(0x708, MTXMODE_APPLY);
    Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY);
    gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
    // @recomp Manual relocations, TODO remove these when automatic.
    AnimatedMat_Draw(play, (AnimatedMaterial*)actor_relocate(thisx, ovl_Oceff_Wipe6_Matanimheader_000338));
    gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, gOceff6DL));

    CLOSE_DISPS(play->state.gfxCtx);
}

extern Gfx sSongOfHealingEffectFrustumDL[];
extern AnimatedMaterial sSongofHealingEffectTexAnim[];

void OceffWipe7_Draw(Actor* thisx, PlayState* play) {
    OceffWipe7* this = (OceffWipe7*)thisx;
    f32 z;
    u8 alpha;
    s32 i;
    s32 counter;
    Vec3f activeCamEye = GET_ACTIVE_CAM(play)->eye;
    s32 pad;
    Vec3f quakeOffset;
    s32 pad2;

    // @recomp Apply the patch to the DL if necessary.
    patch_ocarina_effect(thisx, sSongOfHealingEffectFrustumDL, 23, healing_override_dl);

    quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play));

    if (this->counter < 32) {
        z = Math_SinS(this->counter * 0x200) * 1220.0f;
    } else {
        z = 1220.0f;
    }

    if (this->counter >= 80) {
        alpha = 12 * (100 - this->counter);
    } else {
        alpha = 255;
    }

    // @recomp Replace the set alpha loop with a vertex flag check instead.
    set_ocarina_vertex_alphas(healing_override_verts, ARRAY_COUNT(healing_override_verts), alpha);

    OPEN_DISPS(play->state.gfxCtx);

    Gfx_SetupDL25_Xlu(play->state.gfxCtx);
    Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z,
                     MTXMODE_NEW);
    Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY);
    Matrix_ReplaceRotation(&play->billboardMtxF);
    Matrix_RotateXS(0x708, MTXMODE_APPLY);
    Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY);
    gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
    // @recomp Manual relocations, TODO remove when automated.
    AnimatedMat_Draw(play, (AnimatedMaterial*)actor_relocate(thisx, sSongofHealingEffectTexAnim));
    gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, &sSongOfHealingEffectFrustumDL));

    CLOSE_DISPS(play->state.gfxCtx);
}

extern AnimatedMaterial object_stk2_Matanimheader_009F60[];

// @recomp Patch the Skull Kid curse effect as well, which works similarly to the ocarina effects.
// In this case, the patch also includes effect transform tagging patches.
void EffStk_Draw(Actor* thisx, PlayState* play) {
    EffStk* this = (EffStk*)thisx;
    s32 pad;
    Camera* activeCam = GET_ACTIVE_CAM(play);
    Vec3f eye = activeCam->eye;
    Vec3f quakeOffset;

    quakeOffset = Camera_GetQuakeOffset(activeCam);

    OPEN_DISPS(play->state.gfxCtx);

    Gfx_SetupDL25_Xlu(play->state.gfxCtx);
    Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW);
    Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
    Matrix_ReplaceRotation(&play->billboardMtxF);
    Matrix_Translate(0.0f, 0.0f, this->unk148, MTXMODE_APPLY);

    Mtx* mtx = Matrix_NewMtx(play->state.gfxCtx);

    // @recomp Tag the transform. Do not allow edits as this will get edited by the billboard detection and we'll want to skip position during a camera cut too.
    if (camera_was_skipped()) {
        gEXMatrixGroupDecomposedSkipPosRot(POLY_XLU_DISP++, actor_transform_id(thisx), G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_NONE);
    }
    else {
        gEXMatrixGroupDecomposedNormal(POLY_XLU_DISP++, actor_transform_id(thisx), G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_NONE);
    }

    gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
    AnimatedMat_DrawAlphaStep(play, Lib_SegmentedToVirtual(object_stk2_Matanimheader_009F60), 1.0f, this->unk144);
    gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE);
    gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE);
    // @recomp Use the new DLs instead of the originals.
    gSPDisplayList(POLY_XLU_DISP++, skull_kid_curse_2_override_dl);
    gSPDisplayList(POLY_XLU_DISP++, skull_kid_curse_1_override_dl);

    // @recomp Pop the transform tag.
    gEXPopMatrixGroup(POLY_XLU_DISP++, G_MTX_MODELVIEW);

    CLOSE_DISPS(play->state.gfxCtx);
}
